LIS nlogn解法 Posted on 2018-09-06 | In ACM , HDU $LIS$: 最长上升子序列 解法 $LIS$ 的 $well-knowed$ 的 $dp$ 解法是 $n^2$ $nlogn$解法是二分贪心替换掉当前不符合上升的数字 代码12345678910111213141516171819202122232425#include<bits/stdc++.h>using namespace std;typedef long long ll;int a[100], lis[100], cnt, n;int main(){ scanf("%d", &n); for(int i=1;i<=n;i++) scanf("%d", &a[i]); cnt=0; lis[cnt++]=a[1]; for(int i=2;i<=n;i++) { if(a[i]>lis[cnt-1]) lis[cnt++]=a[i]; else { int pos=lower_bound(lis, lis+cnt, a[i])-lis; lis[pos]=a[i]; } } printf("%d\n", cnt);}